// import * as Cesium from "cesium";

// class D3 {
//   _viewer: Cesium.Viewer | undefined;
//   _scene: Cesium.Scene | undefined;
//   _layer: undefined;
//   _sceneData: undefined;
//   _mapData: undefined;
//   _state: undefined;
//   constructor() {}
//   /**
//    * 初始化
//    */
//   init(opt = {}) {
//     if (configs.mapDom && configs.mapUrl) {
//       Cesium.Ion.defaultAccessToken =
//         "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYTQ2ZjdjNS1jM2E0LTQ1M2EtOWM0My1mODMzNzY3YjYzY2YiLCJpZCI6MjkzMjcsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1OTE5NDIzNjB9.RzKlVTVDTQ9r7cqCo-PDydgUh8Frgw0Erul_BVxiS9c";

//       this._viewer = new Cesium.Viewer(configs.mapDom, configs.mapOptions);

//       this._util = new Cesium.Utils(this._viewer);

//       this._viewer.imageryLayers.addImageryProvider(
//         new Cesium.MapboxImageryProvider({
//           mapId: "mapbox.dark",
//         })
//       );

//       this._scene = this._viewer.scene;

//       this._scene.skyBox = this._util.setTwoGroundSkyBox();

//       this._util.setSnowEffect();

//       this.config(opt); //默认开始配置

//       this.loadScene(); //加载场景

//       // this.addThreeObject() //加载three obj
//     } else {
//       alert("请配置地图参数");
//     }
//   }

//   /**
//    * 场景配置
//    *
//    * @param opt
//    */
//   config(opt) {
//     if (this._scene) {
//       //设置环境光
//       this._scene.lightSource.ambientLightColor =
//         opt.ambientLightColor || new Cesium.Color(0.08, 0.08, 0.08, 1);

//       //深度检测
//       // this._scene.globe.depthTestAgainstTerrain = false;

//       //地面调节
//       //this._scene.globe.baseColor = Cesium.Color.BLACK;
//       //this._scene.globe.globeAlpha = 0.1;
//       this._scene.undergroundMode = true;
//       this._scene.terrainProvider.isCreateSkirt = false;

//       //调节场景环境
//       this._scene.sun.show = false;
//       this._scene.moon.show = false;
//       // this._scene.skyBox.show = false;
//       this._scene.skyAtmosphere.show = false;
//       this._scene.fxaa = true;

//       //开启颜色校正
//       this._scene.colorCorrection.show = opt.colorCorrection || false;
//       this._scene.colorCorrection.saturation = opt.saturation || 3.1;
//       this._scene.colorCorrection.brightness = opt.brightness || 1.8;
//       this._scene.colorCorrection.contrast = opt.contrast || 1.2;
//       this._scene.colorCorrection.hue = opt.hue || 0;

//       //开启泛光和HDR
//       this._scene.bloomEffect.show = opt.bloomEffect || false;
//       this._scene.hdrEnabled = opt.hdrEnabled || true;
//       this._scene.bloomEffect.threshold = 1;
//       this._scene.bloomEffect.bloomIntensity = 2;

//       //最大距离
//       this._scene.screenSpaceCameraController.maximumZoomDistance = 5000.0;
//     }
//   }

//   loadScene() {
//     if (this._scene) {
//       /**
//        * 建筑
//        */
//       const promise = this._scene.open(configs.sceneUrl);

//       Cesium.when.all(promise, (layer) => {
//         this._util.setView({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.6269866033348,
//             29.53232673901685,
//             2000
//           ),
//           orientation: {
//             heading: 350.3706,
//             pitch: -12.75012,
//             roll: 0.00306,
//           },
//         });

//         layer[0].style3D.emissionColor = new Cesium.Color(2, 5, 10, 1); //自发光颜色

//         this._util.setHypsometric(layer[0]);

//         this._util.bindFlyCircle(true); //给鼠标绑定旋转操作
//       });

//       /**
//        * 扫描物
//        */
//       new Promise((resolve, reject) => {
//         this._util.setRadarScanEffect({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.54439406642704,
//             29.53412750079538,
//             10.0
//           ),
//           color: Cesium.Color.DARKCYAN,
//           radius: 500,
//         });

//         this.addWall();
//       });

//       /**
//        * 路网
//        */
//       new Promise((resolve, reject) => {
//         this.addRoadLine("examples/data/json/lineback_1.json");

//         this.addRoadLine("examples/data/json/lineback2_1.json");

//         this.addRoadLine("examples/data/json/lineback3_1.json");
//       });

//       /**
//        * 路径漫游
//        */
//       new Promise((resolve, reject) => {
//         const paths = [
//           {
//             lon: 106.57003293712452,
//             lat: 29.524797836353418,
//             alt: 0,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.56383672216968,
//             lat: 29.53146964052541,
//             alt: 0,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.56144813002342,
//             lat: 29.531134070376954,
//             alt: 0,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.55416088966606,
//             lat: 29.530970546674276,
//             alt: 0,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.55414087849685,
//             lat: 29.53383654312555,
//             alt: 0,
//             height: 10000,
//             time: 480,
//           },
//           {
//             lon: 106.55414087849685,
//             lat: 29.53383654312555,
//             alt: 0,
//             height: 10000,
//             time: 600,
//           },
//         ];
//         this._util.setPathRoaming({
//           paths: paths,
//           model: true,
//           m_url: "examples/data/model/qiche.gltf",
//           m_scale: 1,
//           m_minimumPixelSize: 1,
//           label: true,
//           l_text: "任务车辆.1",
//           l_pixelOffset: new Cesium.Cartesian2(42, -48),
//           l_fillColor: Cesium.Color.WHITE,
//           l_outlineWidth: 3,
//           billboard: true,
//           b_img: "examples/images/Textures/bp.png",
//           b_width: 55,
//           b_height: 80,
//           b_scale: 2,
//           b_pixelOffset: new Cesium.Cartesian2(20, 0),
//         });

//         const paths2 = [
//           {
//             lon: 106.5565907627419,
//             lat: 29.53456446159264,
//             alt: 0,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.55814221039576,
//             lat: 29.53472126114135,
//             alt: 0,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.55967343745067,
//             lat: 29.535457923243882,
//             alt: 0,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.5605585760546,
//             lat: 29.535371534594482,
//             alt: 0,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.56333275485729,
//             lat: 29.532352521691557,
//             alt: 0,
//             height: 10000,
//             time: 480,
//           },
//           {
//             lon: 106.56401603756584,
//             lat: 29.53145981355466,
//             alt: 0,
//             height: 10000,
//             time: 600,
//           },
//           {
//             lon: 106.56560417620496,
//             lat: 29.531485540486234,
//             alt: 0,
//             height: 10000,
//             time: 720,
//           },
//           {
//             lon: 106.56982272180862,
//             lat: 29.532047070094315,
//             alt: 0,
//             height: 10000,
//             time: 840,
//           },
//         ];

//         this._util.setPathRoaming({
//           paths: paths2,
//           model: true,
//           m_url: "examples/data/model/qiche.gltf",
//           m_scale: 1,
//           m_minimumPixelSize: 1,
//           label: true,
//           l_text: "任务车辆.2",
//           l_pixelOffset: new Cesium.Cartesian2(42, -48),
//           l_fillColor: Cesium.Color.WHITE,
//           l_outlineWidth: 3,
//           billboard: true,
//           b_img: "examples/images/Textures/bp.png",
//           b_width: 55,
//           b_height: 80,
//           b_scale: 2,
//           b_pixelOffset: new Cesium.Cartesian2(20, 0),
//         });

//         const paths3 = [
//           {
//             lon: 106.55995243647547,
//             lat: 29.543838865278495,
//             alt: 0,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.56012297535275,
//             lat: 29.54135878173985,
//             alt: 0,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.56010025753658,
//             lat: 29.538155717188193,
//             alt: 0,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.5602143992771,
//             lat: 29.535935972391595,
//             alt: 0,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.56566297913831,
//             lat: 29.529388590619995,
//             alt: 0,
//             height: 10000,
//             time: 480,
//           },
//           {
//             lon: 106.56566297913831,
//             lat: 29.529388590619995,
//             alt: 0,
//             height: 10000,
//             time: 600,
//           },
//         ];

//         this._util.setPathRoaming({
//           paths: paths3,
//           model: true,
//           m_url: "examples/data/model/qiche.gltf",
//           m_scale: 1,
//           m_minimumPixelSize: 1,
//           label: true,
//           l_text: "任务车辆.3",
//           l_pixelOffset: new Cesium.Cartesian2(42, -48),
//           l_fillColor: Cesium.Color.WHITE,
//           l_outlineWidth: 3,
//           billboard: true,
//           b_img: "examples/images/Textures/bp.png",
//           b_width: 55,
//           b_height: 80,
//           b_scale: 2,
//           b_pixelOffset: new Cesium.Cartesian2(20, 0),
//         });

//         const paths4 = [
//           {
//             lon: 106.55254218312906,
//             lat: 29.525324292576798,
//             alt: 0,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.55094702943869,
//             lat: 29.528138996089695,
//             alt: 0,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.55416687394586,
//             lat: 29.531015366619958,
//             alt: 0,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.55796107689329,
//             lat: 29.531015366619958,
//             alt: 0,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.55796107689329,
//             lat: 29.53111995652228,
//             alt: 0,
//             height: 10000,
//             time: 480,
//           },
//           {
//             lon: 106.55826360770091,
//             lat: 29.526149944173504,
//             alt: 0,
//             height: 10000,
//             time: 600,
//           },
//           {
//             lon: 106.55834657023352,
//             lat: 29.525744009935668,
//             alt: 0,
//             height: 10000,
//             time: 720,
//           },
//         ];

//         this._util.setPathRoaming({
//           paths: paths4,
//           model: true,
//           m_url: "examples/data/model/CesiumMilkTruck.glb",
//           m_scale: 10,
//           label: true,
//           l_text: "社会车辆.1",
//           l_pixelOffset: new Cesium.Cartesian2(42, -70),
//           l_fillColor: Cesium.Color.WHITE,
//           l_outlineWidth: 3,
//           billboard: true,
//           b_img: "examples/images/Textures/bp2.png",
//           b_width: 55,
//           b_height: 80,
//           b_scale: 2,
//           b_pixelOffset: new Cesium.Cartesian2(20, -20),
//         });

//         const paths5 = [
//           {
//             lon: 106.54785660441873,
//             lat: 29.541068287177758,
//             alt: 0,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.55096736681742,
//             lat: 29.541274671684562,
//             alt: 0,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.55417026108965,
//             lat: 29.542723927762594,
//             alt: 0,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.55768185185038,
//             lat: 29.543343891151327,
//             alt: 0,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.56177018350208,
//             lat: 29.543572027310912,
//             alt: 0,
//             height: 10000,
//             time: 480,
//           },
//           {
//             lon: 106.564952958958,
//             lat: 29.543196019188958,
//             alt: 0,
//             height: 10000,
//             time: 600,
//           },
//           {
//             lon: 106.56496364017232,
//             lat: 29.543182043715298,
//             alt: 0,
//             height: 10000,
//             time: 720,
//           },
//         ];

//         this._util.setPathRoaming({
//           paths: paths5,
//           model: true,
//           m_url: "examples/data/model/CesiumMilkTruck.glb",
//           m_scale: 10,
//           label: true,
//           l_text: "社会车辆.2",
//           l_pixelOffset: new Cesium.Cartesian2(42, -70),
//           l_fillColor: Cesium.Color.WHITE,
//           l_outlineWidth: 3,
//           billboard: true,
//           b_img: "examples/images/Textures/bp2.png",
//           b_width: 55,
//           b_height: 80,
//           b_scale: 2,
//           b_pixelOffset: new Cesium.Cartesian2(20, -20),
//         });

//         const paths6 = [
//           {
//             lon: 106.53723590282631,
//             lat: 29.549647357633564,
//             alt: 300,
//             height: 10000,
//             time: 0,
//           },
//           {
//             lon: 106.54729432614089,
//             lat: 29.525784806338617,
//             alt: 300,
//             height: 10000,
//             time: 120,
//           },
//           {
//             lon: 106.5710138566176,
//             lat: 29.516772520652342,
//             alt: 300,
//             height: 10000,
//             time: 240,
//           },
//           {
//             lon: 106.5788276019971,
//             lat: 29.53780626182699,
//             alt: 300,
//             height: 10000,
//             time: 360,
//           },
//           {
//             lon: 106.54982114025249,
//             lat: 29.543572027310912,
//             alt: 300,
//             height: 10000,
//             time: 480,
//           },
//         ];

//         const flyEntity = this._util.setPathRoaming({
//           paths: paths6,
//           model: true,
//           m_url: "examples/data/model/CesiumDrone.gltf",
//           label: true,
//           l_text: "无人机侦察",
//           l_outlineWidth: 3,
//           l_fillColor: Cesium.Color.CYAN,
//         });
//         // this._viewer.entities.add(this._util.createDynamicCylinder({
//         //     positions: flyEntity.position.getValue(this._viewer.clock.currentTime),
//         //     entity: flyEntity,
//         //     cylinder: {
//         //         length: 50,
//         //         slices: 6,
//         //         bottomRadius: 200,
//         //         material: new Cesium.WarnLinkMaterialProperty({ freely: 'vertical', color: Cesium.Color.ORANGE, duration: 1, count: 0.0, direction: '-' }),
//         //     }
//         // }))

//         const pointLight = this._util.setPointLight(
//           flyEntity.position.getValue(this._viewer.clock.currentTime),
//           {
//             color: new Cesium.Color(9, 160, 15, 0.8),
//             cutoffDistance: 500,
//             decay: 2,
//             intensity: 5,
//           }
//         );

//         this._viewer.clock.onTick.addEventListener((clock) => {
//           const position = flyEntity.position.getValue(
//             this._viewer.clock.currentTime
//           );

//           pointLight.position = position;
//         });
//       });

//       /**
//        * 高度光源线
//        */
//       new Promise((resolve, reject) => {
//         this.addHeightLineLight({
//           positions: {
//             startPoint: Cesium.Cartesian3.fromDegrees(
//               106.56558869414897,
//               29.546645918115,
//               0.0
//             ),
//             endPoint: Cesium.Cartesian3.fromDegrees(
//               106.56558869414897,
//               29.546645918115,
//               20000.0
//             ),
//           },
//           color: Cesium.Color.DARKGOLDENROD,
//           width: 6,
//         });

//         this.addHeightLineLight({
//           positions: {
//             startPoint: Cesium.Cartesian3.fromDegrees(
//               106.56698580585798,
//               29.530538206648064,
//               0.0
//             ),
//             endPoint: Cesium.Cartesian3.fromDegrees(
//               106.56698580585798,
//               29.530538206648064,
//               20000.0
//             ),
//           },
//           color: Cesium.Color.CYAN,
//           width: 6,
//         });

//         this.addHeightLineLight({
//           positions: {
//             startPoint: Cesium.Cartesian3.fromDegrees(
//               106.5399480984319,
//               29.53383231300993,
//               0.0
//             ),
//             endPoint: Cesium.Cartesian3.fromDegrees(
//               106.5399480984319,
//               29.53383231300993,
//               20000.0
//             ),
//           },
//           color: Cesium.Color.CYAN,
//           width: 6,
//         });
//         //
//         this._viewer.entities.add({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.5399480984319,
//             29.53383231300993,
//             0.0
//           ),
//           ellipsoid: {
//             radii: new Cesium.Cartesian3(200.0, 200.0, 200.0),
//             material: new Cesium.WallLinkMaterialProperty({
//               freely: "vertical",
//               color: Cesium.Color.RED.withAlpha(0.5),
//               duration: 1000,
//               count: 0,
//               direction: "-",
//             }),
//           },
//         });

//         this.addHeightLineLight({
//           positions: {
//             startPoint: Cesium.Cartesian3.fromDegrees(
//               106.553868801763,
//               29.527073727667158,
//               0.0
//             ),
//             endPoint: Cesium.Cartesian3.fromDegrees(
//               106.553868801763,
//               29.527073727667158,
//               20000.0
//             ),
//           },
//           color: Cesium.Color.DARKGOLDENROD,
//           width: 6,
//         });

//         this.addHeightLineLight({
//           positions: {
//             startPoint: Cesium.Cartesian3.fromDegrees(
//               106.54583250446436,
//               29.542360318905853,
//               0.0
//             ),
//             endPoint: Cesium.Cartesian3.fromDegrees(
//               106.54583250446436,
//               29.542360318905853,
//               0.0
//             ),
//           },
//           color: Cesium.Color.CYAN,
//           width: 6,
//         });

//         //
//         this._viewer.entities.add({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.54583250446436,
//             29.542360318905853,
//             0.0
//           ),
//           ellipsoid: {
//             radii: new Cesium.Cartesian3(200.0, 200.0, 200.0),
//             material: new Cesium.WallLinkMaterialProperty({
//               freely: "vertical",
//               color: Cesium.Color.DARKGREEN.withAlpha(0.1),
//               duration: 1000,
//               count: 0,
//               direction: "-",
//             }),
//           },
//         });
//       });

//       /**
//        * 弧线
//        */
//       new Promise((resolve, reject) => {
//         const startPoints = Cesium.Cartesian3.fromDegrees(
//           106.56298388731544,
//           29.532057959712986,
//           230.0
//         );
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55775961346458,
//             29.542807433251742,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55775961346458,
//             lat: 29.542807433251742,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });

//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55510300690722,
//             29.527818241746893,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55510300690722,
//             lat: 29.527818241746893,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55826955975746,
//             29.533090799351488,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55826955975746,
//             lat: 29.533090799351488,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });

//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.5518898036773,
//             29.53425871475176,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: { lng: 106.5518898036773, lat: 29.53425871475176, alt: 0.0 },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });

//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55831081954038,
//             29.538058310725905,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55831081954038,
//             lat: 29.538058310725905,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });

//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55200667660088,
//             29.529567664624146,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55200667660088,
//             lat: 29.529567664624146,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.56818853301075,
//             29.525016061106154,
//             0.0
//           ),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.56818853301075,
//             lat: 29.525016061106154,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });

//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.57296659709463,
//             29.5293255402316,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: { lng: 106.57296659709463, lat: 29.5293255402316, alt: 0.0 },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.56948261814809,
//             29.53323873346,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: { lng: 106.56948261814809, lat: 29.53323873346, alt: 0.0 },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.55511738770666,
//             29.520780769175847,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: {
//             lng: 106.55511738770666,
//             lat: 29.520780769175847,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.56938764079821,
//             29.53789177413806,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: { lng: 106.56938764079821, lat: 29.53789177413806, alt: 0.0 },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.56869940844197,
//             29.54266106727103,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: { lng: 106.56869940844197, lat: 29.54266106727103, alt: 0.0 },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//         this.addRadianLineLight({
//           startPoint: startPoints,
//           endPoint: Cesium.Cartesian3.fromDegrees(
//             106.57656077263997,
//             29.538952807799447,
//             0.0
//           ),
//         });
//         this.addDynamicCricle({
//           circle: {
//             lng: 106.57656077263997,
//             lat: 29.538952807799447,
//             alt: 0.0,
//           },
//           color: Cesium.Color.CYAN,
//           height: 0,
//           radius: 20,
//           count: 1,
//         });
//       });

//       /**
//        * 楼宇信息
//        */
//       new Promise((resolve, reject) => {
//         this._util.setPointLight(
//           Cesium.Cartesian3.fromDegrees(
//             106.56298388731544,
//             29.532057959712986,
//             50.0
//           ),
//           {
//             color: Cesium.Color.CYAN,
//             cutoffDistance: 250,
//             decay: 1,
//             intensity: 2,
//           }
//         );
//         this.addCircleLine({
//           semiMinorAxis: 150,
//           semiMajorAxis: 150,
//           rotation: 0,
//           center: Cesium.Cartesian3.fromDegrees(
//             106.56298388731544,
//             29.532057959712986,
//             40.0
//           ),
//           granularity: Math.PI / 45.0, //间隔
//         });

//         //动态实体 楼宇中心
//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.56298388731544,
//             29.532057959712986,
//             230.0
//           ),
//           model: {
//             lng: 106.56298388731544,
//             lat: 29.532057959712986,
//             alt: 230.0,
//           },
//           circle: {
//             lng: 106.56298388731544,
//             lat: 29.532057959712986,
//             alt: 350.0,
//           },
//           m_color: Cesium.Color.GREEN,
//           label: true,
//           billboard: true,
//           text: " xx大厦 ",
//           l_fillColor: Cesium.Color.GREEN,
//           l_pixelOffset: new Cesium.Cartesian2(0, -5),
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.56298388731544,
//             lat: 29.532057959712986,
//             alt: 230.0,
//           },
//           color: Cesium.Color.GREEN,
//           height: 205,
//           radius: 30,
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.5659092537878,
//             29.530924830570186,
//             120.0
//           ),
//           model: {
//             lng: 106.5659092537878,
//             lat: 29.530924830570186,
//             alt: 120.0,
//           },
//           circle: {
//             lng: 106.5659092537878,
//             lat: 29.530924830570186,
//             alt: 120.0,
//           },
//           m_color: Cesium.Color.GREEN,
//           label: true,
//           text: " 写字楼 ",
//           l_fillColor: Cesium.Color.GREEN,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.5659092537878,
//             lat: 29.530924830570186,
//             alt: 120.0,
//           },
//           color: Cesium.Color.GREEN,
//           height: 95,
//           radius: 20,
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.56240261998792,
//             29.527304750255123,
//             120.0
//           ),
//           model: {
//             lng: 106.56240261998792,
//             lat: 29.527304750255123,
//             alt: 120.0,
//           },
//           circle: {
//             lng: 106.56240261998792,
//             lat: 29.527304750255123,
//             alt: 120.0,
//           },
//           m_color: Cesium.Color.GREEN,
//           label: true,
//           l_fillColor: Cesium.Color.GREEN,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: " 服务中心 ",
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.56240261998792,
//             lat: 29.527304750255123,
//             alt: 120.0,
//           },
//           color: Cesium.Color.GREEN,
//           height: 95,
//           radius: 20,
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.56339406642704,
//             29.53412750079538,
//             180.0
//           ),
//           model: {
//             lng: 106.56339406642704,
//             lat: 29.53412750079538,
//             alt: 180.0,
//           },
//           circle: {
//             lng: 106.56339406642704,
//             lat: 29.53412750079538,
//             alt: 180.0,
//           },
//           m_color: Cesium.Color.GREEN,
//           label: true,
//           l_fillColor: Cesium.Color.GREEN,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: " 商场 ",
//         });

//         this.addDynamicCricle({
//           circle: {
//             lng: 106.56339406642704,
//             lat: 29.53412750079538,
//             alt: 180.0,
//           },
//           color: Cesium.Color.GREEN,
//           height: 155,
//           radius: 20,
//         });

//         //

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.54439406642704,
//             29.53412750079538,
//             200.0
//           ),
//           model: {
//             lng: 106.54439406642704,
//             lat: 29.54439406642704,
//             alt: 200.0,
//           },
//           m_scale: 35,
//           minimumPixelSize: 80,
//           m_color: Cesium.Color.CYAN,
//           label: true,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           l_fillColor: Cesium.Color.CYAN,
//           billboard: false,
//           text: " 雷达探测 ",
//         });

//         //

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.55439406642704,
//             29.53412750079538,
//             80.0
//           ),
//           model: { lng: 106.55439406642704, lat: 29.53412750079538, alt: 80.0 },
//           m_scale: 35,
//           minimumPixelSize: 80,
//           m_color: Cesium.Color.CYAN,
//           label: true,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: "车牌: 京A53137 ",
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.54439406642704,
//             29.54412750079538,
//             80.0
//           ),
//           model: { lng: 106.54439406642704, lat: 29.54412750079538, alt: 80.0 },
//           m_scale: 35,
//           minimumPixelSize: 80,
//           m_color: Cesium.Color.CYAN,
//           label: true,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: "车牌: 京A52157 ",
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.53582326246042,
//             29.53843116134104,
//             80.0
//           ),
//           model: { lng: 106.53582326246042, lat: 29.53843116134104, alt: 80.0 },
//           m_scale: 35,
//           minimumPixelSize: 80,
//           m_color: Cesium.Color.CYAN,
//           label: true,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: "车牌: 京B52688 ",
//         });

//         this.addDynamicEntity({
//           position: Cesium.Cartesian3.fromDegrees(
//             106.57205354541892,
//             29.560026997082456,
//             300.0
//           ),
//           model: {
//             lng: 106.57205354541892,
//             lat: 29.560026997082456,
//             alt: 300.0,
//           },
//           m_scale: 35,
//           minimumPixelSize: 80,
//           m_color: Cesium.Color.GREEN,
//           label: true,
//           l_pixelOffset: new Cesium.Cartesian2(0, -20),
//           billboard: false,
//           text: " 隔离区 ",
//         });
//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.55682326246042,
//             29.534247808485972,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.55882326246042,
//             29.534247808485972,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.55982326246042,
//             29.534247808485972,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.56082326246042,
//             29.534247808485972,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.56582326246042,
//             29.534247808485972,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.55982326246042,
//             29.52843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.56082326246042,
//             29.52843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.56582326246042,
//             29.52843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.54982326246042,
//             29.52843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.53082326246042,
//             29.52843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.55582326246042,
//             29.54843116134104,
//             1.0
//           )
//         );

//         this.addPoi(
//           Cesium.Cartesian3.fromDegrees(
//             106.54539406642704,
//             29.54412750079538,
//             1.0
//           )
//         );
//       });

//       // this._viewer.scene.camera.moveEnd.addEventListener((move) => {

//       //     console.log(this._util.getCameraPosition())

//       // });
//       // var _handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas)
//       // _handler.setInputAction((movement) => {

//       //     var cartesian = this._util.getCatesian3FromPX(movement.position)

//       //     console.log(this._util.transformCartesianToWGS84(cartesian))

//       // }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//       // this._util.setDark()
//       // this._util.getHandelPosition((position,handel)=>{
//       //     console.log(position)

//       // })

//       // this._util.setScanCircleEffect({
//       //     position: new Cesium.Cartesian3.fromDegrees(106.50642721790797, 29.658575326606123, 5.0)
//       // })

//       // this._util.drawLine((value) => {
//       //     console.log(value)
//       // })
//     }
//   }

//   addRoadLine(url, polyline) {
//     const DEF_STYLE = {
//       width: 2,
//     };
//     polyline = polyline || DEF_STYLE;

//     if (url) {
//       this._util.addLineLayer({
//         url: url,
//         polyline: polyline,
//       });
//     }
//   }

//   addDynamicCricle = function (opt) {
//     const cricleEntity = this._util.createDynamicCricle({
//       center: opt.circle,
//       imge: opt.imge,
//       material: new Cesium.CircleWaveMaterialProperty({
//         color: opt.color || Cesium.Color.DARKCYAN.withAlpha(0.8),
//         count: opt.count || 3,
//         gradient: opt.gradient || 0.9,
//       }),
//       radius: opt.radius || 100,
//       height: opt.height || 0.1,
//       rotateAmount: 0.01,
//     });
//     this._viewer.entities.add(cricleEntity);
//   };
// }

// /**
//  * 配置
//  */
// const configs = {
//   d3map: null,

//   mapDom: "cesiumContainer",

//   mapUrl: "examples/images/BlackMarble_2016.jpg",

//   mapOptions: {
//     shouldAnimate: true,
//     useDefaultRenderLoop: true,
//     infoBox: false,
//     contextOptions: {
//       webgl: {
//         alpha: false,
//         antialias: true,
//         preserveDrawingBuffer: true,
//         failIfMajorPerformanceCaveat: false,
//         depth: true,
//         stencil: false,
//         anialias: false,
//       },
//     },
//   },

//   sceneUrl:
//     "http://www.supermapol.com/realspace/services/3D-CQmodel_wireframe_2000/rest/realspace",
// };
// /**
//  * 返回的 Cesium对象
//  * @param {*} Cesium
//  */
// function onloadApp() {
//   try {
//     //初始化三维球
//     const d3map = D3;

//     d3map.init(); //d3map.initGUI()

//     document.getElementsByClassName("cesium-widget-credits")[0].style.display =
//       "none";
//     configs.d3map = d3map;
//   } catch (error) {
//     console.log(error);
//   }
// }

// /**
//  * 场景配置
//  *
//  * @param opt
//  */

// /**
//  * 加载场景
//  *
//  * 示例白膜数据
//  */

// D3.prototype.addRoadLine = function

// D3.prototype.

// D3.prototype.addDynamicEntity = function (opt) {
//   const Entity = this._util.createEntity();

//   if (opt.model) {
//     Entity.model = this._util.getModel({
//       m_url: opt.m_url || "examples/data/model/zhui.glb",
//       m_scale: opt.m_scale || 40,
//       m_minimumPixelSize: opt.m_minimumPixelSize || 50,
//       m_color: opt.m_color || Cesium.Color.DARKCYAN.withAlpha(0.5),
//     });

//     this._util.setRotateModel({
//       entity: Entity,
//       position: opt.model,
//       rotateAmount: 4,
//     });
//   }

//   if (opt.billboard) {
//     Entity.billboard = this._util.getBillboard({
//       b_img: "examples/images/Textures/warn.png",
//       b_width: 55,
//       b_height: 55,
//       b_pixelOffset: opt.b_pixelOffset || new Cesium.Cartesian2(0, -60),
//     });
//   }

//   if (opt.label) {
//     Entity.label = this._util.getLabel({
//       l_text: opt.text,
//       l_font: "16px sans-serif",
//       l_pixelOffset: opt.l_pixelOffset || new Cesium.Cartesian2(0, -100),
//       l_fillColor: opt.l_fillColor || Cesium.Color.CYAN,
//     });
//   }

//   Entity.position = opt.position;
//   this._viewer.entities.add(Entity);
// };

// D3.prototype.addPoi = function (position) {
//   this._viewer.entities.add(
//     this._util.createPoint({
//       position: position,
//       lable: false,
//       point: false,
//       billboard: {
//         b_img: "examples/images/Textures/poi2.png",
//         b_width: 42,
//         b_height: 140,
//         b_scale: 1.5,
//       },
//     })
//   );
// };

// D3.prototype.addRadianLineLight = function (
//   positions,
//   angularityFactor = 50000,
//   numOfSingleLine = 500,
//   cutoffDistance = 100
// ) {
//   if (positions) {
//     this._util.addMaterialLine({
//       positions: this._util.getLinkedPointList(
//         positions.startPoint,
//         positions.endPoint,
//         angularityFactor,
//         numOfSingleLine
//       ),
//       width: 8,
//       material: new Cesium.PolylineCityLinkMaterialProperty({
//         color: Cesium.Color.CYAN,
//         duration: 20000,
//       }),
//     });

//     this._util.setPointLight(positions.endPoint, {
//       color: new Cesium.Color(1, 1, 2, 0.8),
//       cutoffDistance: cutoffDistance,
//       decay: 0.5,
//       intensity: 1,
//     });
//   }
// };

// D3.prototype.addHeightLineLight = function (opt) {
//   if (opt) {
//     this._util.addMaterialLine({
//       positions: [opt.positions.startPoint, opt.positions.endPoint],
//       width: opt.width || 50,
//       material: new Cesium.PolylineCityLinkMaterialProperty({
//         color: opt.color || new Cesium.Color(2, 2, 5, 0.8),
//         duration: opt.duration || 30000,
//       }),
//     });

//     if (opt.pointLight) {
//       this._util.setPointLight(positions.startPoint, {
//         color: new Cesium.Color(1, 1, 2, 0.8),
//         cutoffDistance: opt.cutoffDistance || 800,
//         decay: 0.5,
//         intensity: 1,
//       });
//     }
//   }
// };

// D3.prototype.addCircleLine = function (opt) {
//   const ellipse = this._util.computeEllipseEdgePositions(opt);

//   const positions = [];
//   for (let i = 0; i < ellipse.outerPositions.length; i += 3) {
//     const cartesian = new Cesium.Cartesian3(
//       ellipse.outerPositions[i],
//       ellipse.outerPositions[i + 1],
//       ellipse.outerPositions[i + 2]
//     );
//     positions.push(cartesian);
//   }
//   positions.push(positions[0]);

//   const circleLine = this._viewer.entities.add(
//     this._util.createLine({
//       positions: positions,
//       width: 8,
//       material: new Cesium.PolylineOutlineMaterialProperty({
//         color: Cesium.Color.CYAN,
//       }),
//     })
//   );

//   this._util.setDynamicHeight({
//     entity: circleLine.polyline,
//     cartesians: circleLine.polyline.positions._value,
//     minHeiht: 40,
//     maxHeiht: 220,
//     speed: 0.01,
//   });
// };

// D3.prototype.addWall = function () {
//   const warn = [
//     106.56100246619017, 29.55196242209373, 200.0, 106.56340609277548,
//     29.566165610819642, 200.0, 106.58569020875434, 29.565728490316253, 200.0,
//     106.58005269968774, 29.554240715275743, 200.0, 106.56120354632381,
//     29.55085916174001, 200.0, 106.56100246619017, 29.55196242209373, 200.0,
//   ];
//   // this._viewer.entities.add({
//   //     wall: {
//   //         positions: Cesium.Cartesian3.fromDegreesArrayHeights(warn),
//   //         material: new Cesium.WarnLinkMaterialProperty({ freely: 'cross', color: Cesium.Color.ORANGE, duration: 1000, count: 1.0, direction: '-' }),
//   //     }
//   // });

//   // var wall = [
//   //     106.48371807021667, 29.58911680397793, 300,
//   //     106.51856472700705, 29.521864720316948, 300,
//   //     106.58365973316853, 29.509643881335794, 300,
//   //     106.59786596223937, 29.55949597535444, 300,
//   //     106.59947239295121, 29.571088868292403, 300,
//   //     106.53450991438845, 29.604637451928784, 300,
//   //     106.50579172352724, 29.650956459667555, 300,
//   //     106.48371807021667, 29.58911680397793, 300
//   // ]

//   this._viewer.entities.add({
//     wall: {
//       positions: Cesium.Cartesian3.fromDegreesArrayHeights(warn),
//       material: new Cesium.WallLinkMaterialProperty({
//         freely: "vertical",
//         color: Cesium.Color.DARKGREEN.withAlpha(0.1),
//         duration: 1000,
//         count: 0,
//         direction: "-",
//       }),
//     },
//   });
// };

// D3.prototype.addThreeObject = function () {
//   // Lathe geometry
//   const doubleSideMaterial = new THREE.MeshNormalMaterial({
//     side: THREE.DoubleSide,
//   });
//   const segments = 10;
//   const points = [];
//   for (let i = 0; i < segments; i++) {
//     points.push(
//       new THREE.Vector2(Math.sin(i * 0.2) * segments + 5, (i - 5) * 2)
//     );
//   }
//   const geometry = new THREE.LatheGeometry(points);
//   const latheMesh = new THREE.Mesh(geometry, doubleSideMaterial);
//   latheMesh.scale.set(100, 100, 100); //scale object to be visible at planet scale
//   latheMesh.position.z += 1500.0; // translate "up" in Three.js space so the "bottom" of the mesh is the handle
//   latheMesh.rotation.x = Math.PI / 2; // rotate mesh for Cesium's Y-up system
//   const latheMeshYup = new THREE.Group();
//   latheMeshYup.add(latheMesh);
//   this._util._three.scene.add(latheMeshYup); // don’t forget to add it to the Three.js scene manually

//   const threeObject = [];

//   const maxWGS84 = [106.57003293712452, 29.524797836353418];
//   const minWGS84 = [106.55003293712452, 29.504797836353418];

//   const _3DOB = this._util.createThreeObject();
//   _3DOB.maxWGS84 = maxWGS84;
//   _3DOB.minWGS84 = minWGS84;
//   _3DOB.threeMesh = latheMeshYup;

//   threeObject.push(_3DOB);

//   this._util.addThreeObjects(threeObject);
// };
// /**
//  * 初始化页面
//  * 添加gu
//  */
// D3.prototype.initGUI = function () {
//   const viewer = this._viewer,
//     gui = new dat.GUI();

//   const sceneObj = new (function () {
//     //泛光开关
//     this.bloomEffectShow = false;
//     //泛光阈值
//     this.bloomThreshold = 1;
//     //泛光强度
//     this.bloomIntensity = 2;
//     //HDR开关
//     this.hdrEnabled = true;
//     //颜色校正
//     this.colorCorrectionShow = false;
//     //饱和度
//     this.colorCorrectionSaturation = 3.1;
//     //亮度
//     this.colorCorrectionBrightness = 1.8;
//     //对比度
//     this.colorCorrectionContrast = 1.2;
//     //色调
//     this.colorCorrectionHue = 0;

//     //环境光
//     this.ambientLightColor = 0.1;
//   })();

//   const sceneEffect = gui.addFolder("场景效果");

//   sceneEffect
//     .add(sceneObj, "bloomEffectShow")
//     .name("泛光开关")
//     .onChange(function (value) {
//       viewer.scene.bloomEffect.show = value;
//       viewer.scene.bloomEffect.threshold = sceneObj.bloomThreshold;
//       viewer.scene.bloomEffect.bloomIntensity = sceneObj.bloomIntensity;
//     });
//   sceneEffect
//     .add(sceneObj, "bloomThreshold", 0, 1, 0.1)
//     .name("泛光阈值")
//     .onChange(function (value) {
//       viewer.scene.bloomEffect.threshold = value;
//     });
//   sceneEffect
//     .add(sceneObj, "bloomIntensity", 0, 10, 0.1)
//     .name("泛光强度")
//     .onChange(function (value) {
//       viewer.scene.bloomEffect.bloomIntensity = value;
//     });
//   sceneEffect
//     .add(sceneObj, "hdrEnabled")
//     .name("HDR开关")
//     .onChange(function (value) {
//       viewer.scene.hdrEnabled = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionShow")
//     .name("颜色校正")
//     .onChange(function (value) {
//       viewer.scene.colorCorrection.show = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionSaturation", 0, 5, 0.1)
//     .name("饱和度")
//     .onChange(function (value) {
//       viewer.scene.colorCorrection.saturation = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionBrightness", 0, 5, 0.1)
//     .name("亮度")
//     .onChange(function (value) {
//       viewer.scene.colorCorrection.brightness = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionContrast", 0, 5, 0.1)
//     .name("对比度")
//     .onChange(function (value) {
//       viewer.scene.colorCorrection.contrast = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionHue", 0, 5, 0.1)
//     .name("色调")
//     .onChange(function (value) {
//       viewer.scene.hdrEnabled = value;
//     });
//   sceneEffect
//     .add(sceneObj, "colorCorrectionHue", 0, 1, 0.1)
//     .name("环境光")
//     .onChange(function (value) {
//       viewer.scene.lightSource.ambientLightColor = new Cesium.Color(
//         value,
//         value,
//         value,
//         1
//       );
//     });
//   sceneEffect.open();
// };

// if (typeof Cesium !== "undefined") {
//   onloadApp();
// }
